ARM NEON 汇编与intrinsics编程 | 您所在的位置:网站首页 › 1320 armv8 neon解码器 › ARM NEON 汇编与intrinsics编程 |
1 简介ARM NEON编程主要有两种最常用的方式手写汇编和intrinsics。本文将对比NEON汇编与NEON intrinsics编程的优缺点。 2 NEON汇编与intrinsicsNEON汇编与intrinsics各有优缺点: NEON 汇编NEON intrinsic性能对于指定平台,汇编总是呈现最好性能。现在的编译器已经能得到媲美手工汇编的性能。可移植性Arm v7-A/v8-A平台 具有不同的汇编格式。即使在Arm v8-A平台,汇编程序可能也需要针对Cortex A53/A57微架构做出不同调整,才能呈现最好性能。选择合适的编译器选项,一次编程即可以很容易实现跨平台并针对该平台微架构调整性能,例如Arm v7-A Cortex A9/A7/A15和Arm v8-A Cortex A53/A57。可维护性相比C语言,较难编程,可读性较差跟C语言类似,比较容易编程与维护但实际情况远远比这些复杂很多,特别是涉及到ARM v7-A/v8-A跨平台的时候。下面我们结合实例做一些更深入的分析。 2.1 编程对于初学者来说,intrinsics比较易学易用。但是对于有汇编经验的开发者来说,可能更熟悉NEON汇编编程,切换到intrinsics反倒需要有个适应过程。下文列出了实际开发中的一些问题。 2.1.1 指令灵活性从指令使用角度来说,汇编指令比intrinsics指令更灵活,主要体现在数据加载/存储上,比如下例: Intrinsics指令 加载数据到一个64位寄存器 vld1_s8/u8/s16/u16/s32…etc加载数据到一个128位寄存器vld1q_s8/u8/s16/u16/s32…etcARM v7-A汇编VLD1 { Dd}, [Rn] VLD1 { Dd, D(d+1) }, [Rn] VLD1 { Dd, D(d+1), D(d+2)}, [Rn] VLD1 { Dd, D(d+1), D(d+2), D(d+3) }, [Rn]ARM v8-A汇编LD1 { . |
CopyRight 2018-2019 实验室设备网 版权所有 |